pandas自动化实战小任务1--对excel表格分 供应商 付款年月 进行汇总(涉及根据即有相同也有不同的index的表格合并)公司的数据

说明:

由于是公司的数据,所以对供应商进行映射处理,
数据下载连接(免费):数据下载

导包

import numpy as np
import pandas as pd

from datetime import datetime
from pandas import DataFrame

读取数据

data = pd.read_csv('./data.csv', index_col=0)

在这里插入图片描述

月份处理(例如:2020年12月)

处理函数

# 时间转化
# 时间转化
def month(v):
    if isinstance(v, datetime):
        return str(v.year) + '年' + str(v.month) + '月'
    
    # 日期格式有可能为: 2020/12/7
    elif '/' in str(v):
        s = v.split('/')
        return str(s[0]) + '年' + str(s[1]) + '月'
    
    # 日期格式有可能为: 2020-9-7
    elif '-' in str(v):
        s = v.split('-')
        return str(s[0]) + '年' + str(s[1]) + '月'
    
    elif isinstance(v, str) or isinstance(v, int) or isinstance(v, float):
        return np.nan

    else:
        return v

映射

for i,j in zip(['定金付款月份', '尾款付款月份', '赊账付款月份' ,'运费付款月份'], 
               ['定金付款时间', '尾款付款时间', '赊账付款时间' ,'运费付款时间']):
    data[i] = data[j].map(month)

根据供应商和月份分组分别进行聚合,

因为付款的月份没统一,所以对四个款项分别聚合求和

moneies = []
for i,j in zip(['定金', '尾款', '赊账', '运费'], ['定金付款月份', '尾款付款月份', '赊账付款月份', '运费付款月份']):
    
    temp = DataFrame(money.loc[:,['供应商', i, j]].dropna())
    # 去除,非数字的行
    temp['condition'] = temp[i].map(lambda v:True if isinstance(v, int) or isinstance(v,float) else False)
    temp = temp[temp.condition]
    temp.drop(columns='condition', inplace=True)
    
    temp = DataFrame(temp.groupby(['供应商', j]).sum())
    temp.rename(index={'供应商':i+'供应商'}, inplace=True)
    moneies.append(temp)

在这里插入图片描述

汇总,

看不懂的请点击:方法9,字典拆分

dic = {**moneies[0].to_dict(), **moneies[1].to_dict(), 
       **moneies[2].to_dict(), **moneies[3].to_dict()}
total = DataFrame(dic)

数据处理,并生成汇总

# 处理函数
def munber(v):
    try:
        v = float(v)
        return v
    except ValueError as e:
        return 0
    return 0
total.fillna(0, inplace=True)
# 去除数字之外的数据
for col in total.columns:
    total[col] = total[col].map(lambda v:v if isinstance(v,float) or isinstance(v,int) else 0)

total.eval("汇总 = 定金+尾款+赊账+运费", inplace=True)
# 去除数字之外的数据
for col in total.columns:
    total[col] = total[col].map(munber)

total.eval("汇总 = 定金+尾款+赊账+运费", inplace=True)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值